package com.xiaoming.controller;



import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaoming.dao.UserDao;
import com.xiaoming.entity.User;
import com.xiaoming.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * (User)表控制层
 *
 * @author makejava
 * @since 2023-03-11 17:27:32
 */
@RestController
@RequestMapping("user")
public class UserController extends ApiController {
    /**
     * 服务对象
     */
    @Resource
    private UserService userService;

    @Resource
    private UserDao userDao;

    /**
     * 分页查询所有数据
     *
     * @param page 分页对象
     * @param user 查询实体
     * @return 所有数据
     */
    @GetMapping
    public R selectAll(Page<User> page, User user) {
        return success(this.userService.page(page, new QueryWrapper<>(user)));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public R selectOne(@PathVariable Serializable id) {
        return success(this.userService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param user 实体对象
     * @return 新增结果
     */
    @PostMapping
    public R insert(@RequestBody User user) {
        return success(this.userService.save(user));
    }

    /**
     * 修改数据
     *
     * @param user 实体对象
     * @return 修改结果
     */
    @PutMapping
    public R update(@RequestBody User user) {
        return success(this.userService.updateById(user));
    }

    @RequestMapping("/updateUserById")
    public boolean updateById(User user) {
        System.out.println(user.toString());
        Long id=user.getId();
        //想要版本生效必须，修改的时候传入原始版本 才会+1
        User byId = userService.getById(id);
        user.setVersion(byId.getVersion());
        return userService.updateById(user);
    }

    // 根据ID批量查询！
    @RequestMapping("/SelectByBatchId")
    @ResponseBody
    public List<User> SelectByBatchId(@RequestBody List<Integer> idList){
        System.out.println(idList);
        return this.userService.listByIds(idList);
    }

    // 自定义查询条件！
    @RequestMapping("/SelectByMap")
    public List<User> SelectByMap(String name){
        System.out.println(name);
        Map queryMap = new HashMap<>();
        queryMap.put("name",name);
        return this.userService.listByMap(queryMap);
    }

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @DeleteMapping

    public R delete(@RequestParam("idList") List<Long> idList) {

        return success(this.userService.removeByIds(idList));
    }

    @RequestMapping("/deleteById")
    public Boolean deleteById(User user) {
        int i = userDao.deleteById(user);
        System.out.println(user.getId());
        return this.userService.removeById(user);
    }

    @RequestMapping("/deleteByIdLogic")
    public boolean deleteByIdLogic(User user) {
        System.out.println(user.getId());
        return this.userService.removeById(user);
    }

    @RequestMapping("/deleteByIds")
    @ResponseBody
    public Boolean deleteByIds(@RequestBody List<Long> idList) {
        idList.forEach(System.out::println);
        return this.userService.removeByIds(idList);
    }



    @RequestMapping("/insert")
    public R insertUser(User user) {
        System.out.println(user);
        return success(this.userService.save(user));
    }
}

